﻿##Gestion de la bibliothèque
from MySQLdb import*

class gest_bib():
    """objet qui gère les fonctions d'écriture/lecture de la base de donnée"""
    def __init__(self,base_bibliotheque="base_bibliothèque"):
        #On se connecte à la base de donnée et on crée un curseur
        self.baseDonn = connect('localhost','root','', 'mysql')
        self.cur = self.baseDonn.cursor()
        #self.cur.execute("SET NAMES UTF8")

################################################################################
    #Fonction debug, A NE PAS UTILISER
    def afficher_livre(self):
        self.cur.execute("SELECT * FROM bib")
        for l in self.cur:
            print(l)

################################################################################

    def liste_livre(self):
        #retourne la liste des livres dans une liste de tuples
        l=[]
        self.cur.execute("SELECT * FROM bib")
        for k in self.cur:
            l.append(k)
        return l

################################################################################

    def fermer_base(self):
        #Ferme la base de donnée, à utiliser à la fin du programme
        self.cur.close()
        self.baseDonn.close()

################################################################################

    def ajout_base(self,requete):
        #Tente d'ajouter un livre à la bdd
        # La requete est une liste ou un tuple qui se compose de la facon
        #suivante:
        #('ref', 'nom_livre', 'nom_auteur','nom_empr','nom_resa')
        #revoie 0 si echec et 1 si succès
        try:
            self.cur.execute("INSERT INTO bib(ref,nom_livre, nom_auteur, \
nom_empr, nom_resa) VALUES("+requete[0]+",'"+requete[1]+"','"+requete[2]+"','\
"+requete[3]+"','"+requete[4]+"')")

        except:
            return 0

        else:
            self.baseDonn.commit()
            return 1

################################################################################

    def emprunter_livre(self,ref_modifier, nom_empr):
        # Modifie la bdd en insérant le nom de l'emprunteur dans la table
        #Paramètres: la référence du livre à emprunter, et la nom de
        #l'emprunteur entre ''
        #revoie 0 si echec et 1 si succès
        if(nom_empr==''):
            return 0
        try:
            #print('allo',ref_modifier)
            self.cur.execute("UPDATE bib SET nom_empr='"+nom_empr+"' \
WHERE ref="+str(ref_modifier)+"")
        except:
            #print('coucou')
            return 0
        else:
            self.baseDonn.commit()
            #self.afficher_livre()
            return 1

################################################################################
    def verif_non_empr(self,ref_modifier):
        # Vérifie que le livre n'est pas déjà emprunté
        #Argument: référence du livre à vérifier entre ''
        # renvoie 0 si oui, 1 si non
        self.cur.execute("SELECT * FROM bib WHERE ref="+ref_modifier+"")
        l=[]
        for k in self.cur:
            l.append(k)
        if l[0][3]!='':
            return 0 #On ne peut pas l'emprunter
        else:
            return 1 # On peut emprunter le livre

################################################################################
    def verif_non_reser(self, ref):
        #On va vérifier que le livre ne soit pas déjà réservé
        #La référence du livre doit être entre ''
        #La fonction renvoie 0 si réussite, 1 si échec.
        self.cur.execute("SELECT * FROM bib WHERE ref="+ref+"")
        l=[]
        for k in self.cur:
            l.append(k)
        if l[0][4]!='':
            return 0 #Impossible de réserver.
        else:
            return 1 #On peut réserver.

################################################################################

    def reserver_livre(self, ref, nom_resa):
                    #Modifie la bdd en insérant le nom du réservant dans
                    #la table
                    #Paramètres: la référence du livre à réserver, et le nom du
                    #réservateur entre ''
                    #revoie 0 si echec et 1 si succès
        try:
            #print(ref) debug
            self.cur.execute("UPDATE bib SET nom_resa='"+nom_resa+"' \
WHERE ref="+ref+"")
        except:
            return 0
        else:
            self.baseDonn.commit()
            return 1

################################################################################
    def rendre_livre(self,ref):
        # Enregistre le retour du livre dans la bdd
        # Argument: la référence du livre à rendre entre ''
        # revoie 0 si echec et 1 si succès
        try:
            self.cur.execute("UPDATE bib SET nom_empr='' \
WHERE ref="+ref+"")
        except:
            return 0
        else:
            self.baseDonn.commit()
            return 1

################################################################################

    def supprimer_livre(self, ref):
        # Supprime un livre de la bdd
        #Argument: la référence du livre à supprimé entre ''
        # revoie 0 si echec et 1 si succès
        try:
            self.cur.execute("DELETE FROM bib WHERE ref="+ref+"")
        except:
            return 0

        else:
            self.baseDonn.commit()
            return 1

################################################################################

    def rechercher(self,recherche):

        resultat=[]

        c=0
        self.cur.execute("SELECT * FROM bib WHERE ref LIKE '%"+recherche+"%' OR\
        nom_livre LIKE '%"+recherche+"%' OR nom_auteur LIKE '%"+recherche+"%'")
        for o in self.cur:
            resultat.append(o)
            c=c+1

        if c==0:
            return 0,recherche
        if c>=1:
            return 1,recherche,resultat,c




